package testview.zhen.com.myapplication.hencoder

import testview.zhen.com.myapplication.mvp.MainContract
import java.lang.StringBuilder

/**
 * Create by ldr
 * on 2019/9/3 11:24.
 *
 *
 * 知识点
 * * Kotlin 中的 out 和 in
 *和 Java 泛型一样，Kolin 中的泛型本身也是不可变的。
 *使用关键字 out 来支持协变，等同于 Java 中的上界通配符 ? extends。  可get不可set
 *使用关键字 in 来支持逆变，等同于 Java 中的下界通配符 ? super。      可set不可get

 */
class Example1{
    //实现逆变
    /**
     * 实现一个 fill 函数，传入一个 Array 和一个对象，将对象填充到 Array 中，
     * 要求 Array 参数的泛型支持逆变（假设 Array size 为 1）。
     */
    fun fill(array: Array<in Cat>,animal: Animal){
       array[0] = animal as Cat
       System.out.println((array.get(0)as Cat).print())
    }

    /**
     *实现一个 copy 函数，传入两个 Array 参数，将一个 Array 中的元素复制到另外个 Array 中，
     * 要求 Array 参数的泛型分别支持协变和逆变。
     * （提示：Kotlin 中的 for 循环如果要用索引，需要使用 Array.indices）
     */
    fun copy (array: Array<in Cat>,array1: Array<out Animal>): Array<in Cat> {
        var muta:MutableList<in Cat> = array.toMutableList()
        for (i in array1.indices){
            muta.add(array1[i] as Cat)
        }
       return muta.toTypedArray()
    }

}